#ifndef __HAL_WIFI_H__
#define __HAL_WIFI_H__

#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef enum
{
    HAL_WIFI_IF_STA = 0,     /**< WiFi station interface */
    HAL_WIFI_IF_AP,          /**< WiFi soft-AP interface */
    HAL_WIFI_IF_MAX
} hal_wifi_interface_t;

typedef enum
{
    HAL_WIFI_MODE_NULL = 0,  /**< null mode */
    HAL_WIFI_MODE_STA,       /**< WiFi station mode */
    HAL_WIFI_MODE_AP,        /**< WiFi soft-AP mode */
    HAL_WIFI_MODE_APSTA,     /**< WiFi station + soft-AP mode */
    HAL_WIFI_MODE_MAX
} hal_wifi_mode_t;

typedef enum
{
    HAL_WIFI_EVENT_WIFI_READY = 0,     /**< WiFi ready */
    HAL_WIFI_EVENT_SCAN_DONE,          /**< finish scanning AP */
    HAL_WIFI_EVENT_STA_START,          /**< station start */
    HAL_WIFI_EVENT_STA_STOP,           /**< station stop */
    HAL_WIFI_EVENT_STA_CONNECTED,      /**< station connected to AP */
    HAL_WIFI_EVENT_STA_DISCONNECTED,   /**< station disconnected from AP */
    HAL_WIFI_EVENT_AP_START,           /**< soft-AP start */
    HAL_WIFI_EVENT_AP_STOP,            /**< soft-AP stop */
    HAL_WIFI_EVENT_AP_STACONNECTED,    /**< a station connected to soft-AP */
    HAL_WIFI_EVENT_AP_STADISCONNECTED, /**< a station disconnected from soft-AP */
    HAL_WIFI_EVENT_STA_GOT_IP,         /**< station got IP */
    HAL_WIFI_EVENT_MAX,                /**< max event */
} hal_wifi_event_t;

// STA 模式初始化参数结构体
typedef struct
{
    const char *ssid;     // Wi-Fi SSID
    const char *password; // Wi-Fi 密码
} hal_wifi_sta_cfg_t;

// AP 模式初始化参数结构体
typedef struct
{
    const char *ssid;        // Wi-Fi SSID
    const char *password;    // Wi-Fi 密码
    uint8_t max_connections; // 最大连接数
    uint8_t channel;         // Wi-Fi 频道
} hal_wifi_ap_cfg_t;

/**
 * @brief Wi-Fi 事件回调函数类型
 * @param event_id 事件ID
 * @param event_data 事件数据
 */
typedef void (*hal_wifi_event_callback_t)(hal_wifi_event_t event_id, void *event_data);

/**
 * @brief 初始化Wi-Fi
 * @return 初始化结果
 */
int hal_wifi_init(void);

/**
 * @brief 反初始化Wi-Fi
 * @return 反初始化结果
 */
int hal_wifi_deinit(void);

/**
 * @brief 初始化STA模式
 * @param sta_config STA模式配置
 * @return 初始化结果
 */
int hal_wifi_init_sta(const hal_wifi_sta_cfg_t *sta_config);

/**
 * @brief 初始化AP模式
 * @param ap_config AP模式配置
 * @return 初始化结果
 */
int hal_wifi_init_ap(const hal_wifi_ap_cfg_t *ap_config);

/**
 * @brief 启动Wi-Fi
 * @return 启动结果
 */
int hal_wifi_start(void);

/**
 * @brief 停止Wi-Fi
 * @return 停止结果
 */
int hal_wifi_stop(void);

/**
 * @brief 连接Wi-Fi
 * @return 连接结果
 */
int hal_wifi_connect(void);

/**
 * @brief 获取Wi-Fi MAC地址
 * @param ifx 接口类型
 * @param mac 存储MAC地址的缓冲区
 * @return 获取结果
 */
int hal_wifi_get_mac(hal_wifi_interface_t ifx, uint8_t *mac);

/**
 * @brief 注册Wi-Fi事件回调函数
 * @param callback 回调函数
 */
void hal_wifi_register_event_callback(hal_wifi_event_callback_t callback);

#ifdef __cplusplus
}
#endif

#endif // __HAL_WIFI_H__
